package com.order.manager.controller.Feedback;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.order.manager.Model.ComplaintInfo;
import com.order.manager.Model.other.RestBean;
import com.order.manager.service.impl.ComplaintInfoServiceImpl;
import com.order.manager.util.JwtUtil;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.List;

/**
 * 用户反馈控制器
 * 处理用户投诉、建议等反馈信息的提交、查询和回复操作
 */
@RestController
@RequestMapping("/api/feedback")
public class FeedbackController {

    // 注入投诉信息服务，处理反馈相关业务逻辑
    @Resource
    ComplaintInfoServiceImpl complaintInfoService;

    // 注入JWT工具类，用于从请求中获取用户身份
    @Resource
    JwtUtil jwtUtil;

    /**
     * 创建用户反馈
     * @param content 反馈内容，通过请求参数传递
     * @param request HTTP请求对象，用于获取用户JWT
     * @return 操作结果：成功返回反馈信息，失败返回错误信息
     */
    @RequestMapping("/create")
    public RestBean createComplaint(String content, HttpServletRequest request) {
        // 从请求头的JWT中解析用户ID
        String uuid = jwtUtil.getJwtUsername(request);

        // 创建反馈信息实体
        ComplaintInfo complaintInfo = new ComplaintInfo();
        // 设置反馈提交时间为当前时间
        complaintInfo.setInputTime(new Date());
        // 设置反馈用户ID
        complaintInfo.setUserId(uuid);
        // 设置反馈内容
        complaintInfo.setContent(content);
        // 设置反馈状态为初始状态（1表示待处理）
        complaintInfo.setState(1);

        // 保存反馈信息到数据库
        return complaintInfoService.save(complaintInfo)
                ? RestBean.success(complaintInfo)
                : RestBean.failure(500, "反馈失败");
    }

    /**
     * 查看当前用户的所有反馈
     * @param request HTTP请求对象，用于获取用户JWT
     * @return 操作结果：成功返回反馈列表，失败返回错误信息
     */
    @RequestMapping("/select")
    public RestBean viewMyBack(HttpServletRequest request) {
        // 从请求头的JWT中解析用户ID
        String uuid = jwtUtil.getJwtUsername(request);

        // 查询该用户的所有反馈信息
        List<ComplaintInfo> complaintInfos = complaintInfoService.list(new QueryWrapper<ComplaintInfo>()
                .eq("user_id", uuid)
        );

        // 返回查询结果
        return RestBean.success(complaintInfos);
    }

    /**
     * 回复用户反馈
     * @param complaintId 反馈ID，通过路径变量传递
     * @param content 回复内容，通过请求参数传递
     * @return 操作结果：成功返回更新后的反馈信息，失败返回错误信息
     */
    @RequestMapping("/freeback/{complaintId}")
    public RestBean freebackComplaint(@PathVariable int complaintId, String content) {
        // 根据反馈ID查询反馈信息
        ComplaintInfo complaintInfo = complaintInfoService.getById(complaintId);
        // 检查反馈信息是否存在
        if (complaintInfo != null) {
            // 设置回复时间为当前时间
            complaintInfo.setUpdateTime(new Date());
            // 设置回复内容
            complaintInfo.setFeedbackContent(content);
            // 更新反馈信息到数据库
            return complaintInfoService.updateById(complaintInfo)
                    ? RestBean.success(complaintInfo)
                    : RestBean.failure(500, "反馈失败");
        }
        // 若反馈信息不存在，返回错误
        return RestBean.failure(403, "反馈记录丢失");
    }
}